package com.example.project7.viewmodel;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.example.project7.model.ListItem;
import java.util.ArrayList;
import java.util.List;

public class ListViewModel extends ViewModel {
    private MutableLiveData<List<ListItem>> itemListLiveData;
    private List<ListItem> itemList;

    public ListViewModel() {
        itemList = new ArrayList<>();
        // 初始化一些示例数据
        initializeData();
    }

    /**
     * 获取列表数据的LiveData
     * @return LiveData<List<ListItem>>
     */
    public LiveData<List<ListItem>> getItemList() {
        if (itemListLiveData == null) {
            itemListLiveData = new MutableLiveData<>();
            itemListLiveData.setValue(itemList);
        }
        return itemListLiveData;
    }

    /**
     * 初始化示例数据
     */
    private void initializeData() {
        itemList.add(new ListItem(1, "Android开发基础", "学习Android开发的基本概念", "Android是一个基于Linux内核的开放源代码移动操作系统，主要应用于智能手机和平板电脑等移动设备。Android系统最初由安迪·鲁宾等人开发制作，最初主要支持手机。", ""));
        itemList.add(new ListItem(2, "RecyclerView使用指南", "掌握RecyclerView的使用方法", "RecyclerView是Android 5.0 (API 21)中引入的一个更灵活、更高效的视图组件，用于显示大量数据集。它通过ViewHolder模式来提高性能，并支持多种布局管理器。", ""));
        itemList.add(new ListItem(3, "ViewModel实践", "了解ViewModel的使用场景", "ViewModel类旨在以注重生命周期的方式存储和管理与UI相关的数据。ViewModel允许数据在配置更改（如屏幕旋转）后继续存在，从而避免了不必要的数据重新加载。", ""));
        itemList.add(new ListItem(4, "LiveData详解", "掌握LiveData的使用方法", "LiveData是一种可观察的数据持有者类。与常规observable不同，LiveData具有生命周期感知能力，这意味着它尊重其他应用组件（如Activity、Fragment或Service）的生命周期。", ""));
        itemList.add(new ListItem(5, "Fragment通信机制", "学习Fragment间通信方式", "Fragment之间可以通过多种方式进行通信，包括接口回调、ViewModel共享数据、EventBus等。选择合适的通信方式对于构建可维护的应用至关重要。", ""));
        itemList.add(new ListItem(6, "数据持久化方案", "了解Android数据存储方式", "Android提供了多种数据持久化方案，包括SharedPreferences、SQLite数据库、Room数据库、文件存储等。根据数据特点选择合适的存储方案。", ""));
        itemList.add(new ListItem(7, "网络请求处理", "掌握网络请求实现", "在Android开发中，网络请求是常见需求。可以使用Retrofit、OkHttp等第三方库来简化网络请求的实现，同时需要注意异步处理和线程安全。", ""));
        itemList.add(new ListItem(8, "UI设计规范", "遵循Material Design设计原则", "Material Design是Google推出的设计语言，提供了丰富的设计原则和组件规范。遵循这些规范可以提升应用的用户体验和一致性。", ""));
        
        if (itemListLiveData != null) {
            itemListLiveData.setValue(itemList);
        }
    }

    /**
     * 模拟刷新数据
     */
    public void refreshData() {
        // 模拟网络请求延迟
        new Thread(() -> {
            try {
                Thread.sleep(2000); // 模拟2秒的网络延迟
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            // 在主线程更新数据
            // 注意：实际项目中应使用Handler或LiveData.postValue()
            if (itemListLiveData != null) {
                // 创建新的数据列表（模拟从网络获取新数据）
                List<ListItem> newList = new ArrayList<>();
                for (int i = 0; i < itemList.size(); i++) {
                    ListItem item = itemList.get(i);
                    newList.add(new ListItem(
                        item.getId(),
                        item.getTitle() + " (已刷新)",
                        item.getDescription(),
                        item.getContent(),
                        item.getImageUrl()
                    ));
                }
                itemListLiveData.postValue(newList);
            }
        }).start();
    }

    /**
     * 删除指定项
     * @param item 要删除的项
     */
    public void deleteItem(ListItem item) {
        itemList.remove(item);
        if (itemListLiveData != null) {
            itemListLiveData.setValue(new ArrayList<>(itemList));
        }
    }

    /**
     * 添加新项
     * @param item 要添加的项
     */
    public void addItem(ListItem item) {
        itemList.add(0, item); // 添加到列表顶部
        if (itemListLiveData != null) {
            itemListLiveData.setValue(new ArrayList<>(itemList));
        }
    }
}